package app.caihan.wanandroid

import app.caihan.scframe.base.BaseApp
import com.scwang.smart.refresh.footer.ClassicsFooter
import com.scwang.smart.refresh.header.ClassicsHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.scwang.smart.refresh.layout.constant.SpinnerStyle

/**
 * BaseApp
 * 1. 所有使用 Hilt 的 App 必须包含 一个使用 @HiltAndroidApp 注解的 Application
 * 2. @HiltAndroidApp 将会触发 Hilt 代码的生成，包括用作应用程序依赖项容器的基类
 * 3. 生成的 Hilt 组件依附于 Application 的生命周期，它也是 App 的父组件，提供其他组件访问的依赖
 * 4. 在 Application 中设置好 @HiltAndroidApp 之后，就可以使用 Hilt 提供的组件了，
 *    Hilt 提供的 @AndroidEntryPoint 注解用于提供 Android 类的依赖（Activity、Fragment、View、Service、BroadcastReceiver）等等
 *    Application 使用 @HiltAndroidApp 注解
 *
 * @author Seven-C
 * @date 2020/7/27
 */
class ScWanAndroidApp : BaseApp(){

    //单例化,利用系统自带的Delegates生成委托属性
    companion object {
        lateinit var instance: ScWanAndroidApp
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
    }

    init {
        //设置全局默认配置（优先级最低，会被其他设置覆盖）
        SmartRefreshLayout.setDefaultRefreshInitializer { context, layout ->
            //开始设置全局的基本参数
            layout.setFooterHeight(40f)
            //是否在刷新的时候禁止列表的操作
            layout.setDisableContentWhenRefresh(true)
            //是否在加载的时候禁止列表的操作
            layout.setDisableContentWhenLoading(true)
            //设置是否启用越界回弹
            layout.setEnableOverScrollBounce(false)
            //设置是否启在下拉 Header 的同时下拉内容
            layout.setEnableHeaderTranslationContent(true)
            //是否启用上拉加载功能
            layout.setEnableLoadMore(true)
            //设置是否在没有更多数据之后 Footer 跟随内容
            layout.setEnableFooterFollowWhenNoMoreData(true)
        }
        SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
            ClassicsHeader(context)
                .setSpinnerStyle(SpinnerStyle.Translate)
                .setTextSizeTitle(13f)
                .setDrawableArrowSize(15f)
                .setDrawableProgressSize(15f)
                .setDrawableMarginRight(10f)
                .setFinishDuration(0)
        }
        SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout ->
            ClassicsFooter(context)
                .setSpinnerStyle(SpinnerStyle.Translate)
                .setTextSizeTitle(13f)
                .setDrawableSize(20f)
                .setDrawableArrowSize(15f)
                .setDrawableProgressSize(15f)
                .setDrawableMarginRight(10f)
                .setFinishDuration(0)
        }
    }
}